package main.java.com.itlin.datastructure.blockingQueue;

/**
 * 目前队列存在的问题
 * 1. 很多场景要求 分离 生产者、 消费者两个角色 、 它们得由不同的线程来担当， 而之前的实现根本没有考虑线程安全问题
 * 2. 队列为空 ， 那么之前的实现里会返回 null， 如果就是硬要拿到一个元素呢 ？ 只能不断循环尝试
 * 3.队列为满， 那么再之前的实现里会返回 false， 如果就是要硬塞进一个元素呢 ？ 只能不断循环尝试
 *
 * 解决方法
 * 1. 用锁保证线程安全
 * 2. 用条件变量让 poll 或 offer 线程进入 **等待** 状态，而不是
 * @param <E>
 */
public interface BlockingQueue<E> { // 阻塞队列
    void offer(E e) throws InterruptedException;

    boolean offer(E e, long timeout) throws InterruptedException;

    E poll() throws InterruptedException;
}
